home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / mint / tw14w12s.zoo / tw14w12s / runtos.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-05-06  |  3.9 KB  |  178 lines

  1. /*
  2.  * runtos: a small program that will launch a TOS or TTP program
  3.  * in a TOSWIN window.
  4.  *
  5. #ifdef WWA_EXT_TOSRUN
  6.  * Invokes TOSWIN_W (from $PATH) if the TOSRUN pipe cannot be found.
  7.  *   (WWA_RUN_TOSWIN)
  8. #endif
  9.  *
  10.  * To compile:
  11.  *     gcc -O -mshort -o runtos.prg runtos.c -lgem16
  12.  * To run:
  13.  *     runtos someprog.tos arg1 arg2 arg3
  14.  *
  15. #ifdef WWA_EXT_TOSRUN
  16.  *
  17.  * OR  runtos -w x y w h someprog.tos arg1 arg2 arg3            (WWA_WIN_RUN)
  18.  * OR  runtos -f fontname fontsize someprog.tos arg1 arg2 arg3  (WWA_FONT_RUN)
  19.  * OR  runtos -g someprog.prg arg1 arg2 arg3                    (WWA_GEM_RUN)
  20.  *
  21.  * -w and -f can be used at same time, but no use with -g.
  22.  *
  23. #endif
  24.  *
  25.  * OR
  26.  *     Using the desktop, do an "Install Application" on runtos.prg.
  27.  *     For "document type", use .TOS. Now, double clicking on a TOS
  28.  *     program will automatically start it up in a TOSWIN window.
  29.  *     (unfortunately, it will also cause all TOSWIN windows to be
  30.  *     hidden -- you'll have to select "TOS programs" from the DESK
  31.  *     menu to get them back again).
  32.  * BUGS
  33.  *     See above. Also, it would be nice to have a "runttp.prg"
  34.  *     that would prompt for .TTP arguments. This is left as an
  35.  *     exercise for the interested reader.
  36.  *
  37.  * "runtos" was written by Eric R. Smith and is hereby placed in
  38.  * the public domain.
  39.  *
  40.  * Thw WWA_* extensions were written by Warwick W. Allison and
  41.  * are also hereby placed in the public domain.
  42.  */
  43.  
  44. #ifdef WWA_EXT_TOSRUN
  45. #include <stdio.h>
  46. #include <string.h>
  47. #include <osbind.h>
  48. #include <mintbind.h>
  49. #include <stdlib.h>
  50. #include <support.h>
  51. #include <unistd.h>
  52. #else
  53. #include <minimal.h>
  54. #endif
  55.  
  56. long _stksize = 2*1024;
  57.  
  58. int
  59. main(int argc, char **argv)
  60. {
  61. /* BUG: shouldn't have a fixed size buffer */
  62.     static char buf[1024];
  63. #ifdef WWA_EXT_TOSRUN
  64. #ifdef WWA_GEM_RUN
  65.     static char prg[128];
  66. #endif
  67. #endif
  68.     char *where = buf;
  69.     int i, fd;
  70.     long r;
  71.     int options=1;
  72.  
  73.     if (!argv[1]) return 2;
  74.  
  75. #ifdef WWA_EXT_TOSRUN
  76.     while (argv[1][0]=='-' && options) {
  77.         switch (argv[1][1]) {
  78.          default:
  79.             options=0;
  80. #ifdef WWA_GEM_RUN
  81.         break; case 'g':
  82.             *where++ = '\01';
  83.             argv++;
  84. #endif
  85. #ifdef WWA_WIN_RUN
  86.         break; case 'w':
  87.             if (argv[2] && argv[3] && argv[4] && argv[5]) {
  88.                 int x=atoi(argv[2]);
  89.                 int y=atoi(argv[3]);
  90.                 int w=atoi(argv[4]);
  91.                 int h=atoi(argv[5]);
  92.  
  93.                 if (w && h) {
  94.                     where += sprintf(where,"\002%d %d %d %d ",x,y,w,h);
  95.                 }
  96.  
  97.                 argv+=5;
  98.             } else {
  99.                 options=0;
  100.             }
  101. #endif
  102. #ifdef WWA_FONT_RUN
  103.         break; case 'f':
  104.             if (argv[2] && argv[3]) {
  105.                 int fontsize=atoi(argv[3]);
  106.                 if (fontsize) {
  107.                     where += sprintf(where,"\003%s@%d ",argv[2],fontsize);
  108.                 }
  109.                 argv+=3;
  110.             } else {
  111.                 options=0;
  112.             }
  113. #endif
  114.         }
  115.     }
  116. #endif
  117.  
  118. /* first, put the path */
  119.     *where++ = Dgetdrv() + 'A';
  120.     *where++ = ':';
  121.     Dgetpath(where, 0);
  122.     if (!*where) *where = '\\';
  123.     strcat(where, " ");
  124.  
  125. #ifdef WWA_EXT_TOSRUN
  126. /* WWA - previously, no conversion was done.  However, TOSWIN assumes DOS */
  127. /* next, put the program (in TOS format) */
  128. #ifdef WWA_UNIX_RUN
  129.     if (unx2dos(argv[1],prg)) {
  130.         strcat(where, argv[1]);
  131.     } else
  132. #endif
  133. #endif
  134.         strcat(where, prg);
  135.  
  136. /* finally, put the arguments */
  137.     for (i = 2; argv[i]; i++) {
  138.         strcat(where, " ");
  139.         strcat(where, argv[i]);
  140.     }
  141.  
  142. #ifdef WWA_RUN_TOSWIN
  143.     fd = Fopen("U:\\PIPE\\TOSRUN", 2);
  144.  
  145.     if (fd < 0) {
  146.         /* Failed - try running TOSWIN */
  147.         char* ext[3]={"PRG","APP",0};
  148.         char* path=getenv("PATH");
  149.         char* filename=findfile("TOSWIN_W",path ? path : ".,\\bin",ext);
  150.         if (!filename) filename=findfile("TOSWIN",path ? path : ".,\\bin",ext);
  151.         if (!filename) return 1;
  152.  
  153.         unx2dos(filename,prg);
  154.  
  155.         if (Pexec(PE_ASYNC_LOADGO,prg,"",0)<0
  156.           && Pexec(PE_ASYNC_LOADGO,prg,"",0)<0) return 1;
  157.  
  158.         /* Give it a fleeting chance of getting up */
  159.         Syield();
  160.  
  161.         /* Retry 5 times to connect to pipe, wait 1 second each time */
  162.         for (i=0; fd<0 && i<5; i++) {
  163.             fd = Fopen("U:\\PIPE\\TOSRUN", 2);
  164.             if (fd < 0) sleep(1);
  165.         }
  166.     }
  167. #else
  168.     if (fd < 0) return 1;
  169. #endif
  170.  
  171.     r = strlen(buf) + 1;
  172.  
  173.     if (Fwrite(fd, r, buf) != r)
  174.         return 1;
  175.  
  176.     return 0;
  177. }
  178.